package ai.people.platform.archives.service;

import ai.people.netmon.framework.domain.gang.construction.entity.*;
import ai.people.netmon.framework.domain.gang.construction.request.*;
import ai.people.netmon.framework.domain.gang.construction.vo.LabelLibTreeVO;
import ai.people.netmon.framework.model.response.PageResponse;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zhenglin
 * @since 2022-07-19
 */
public interface LabelLibService extends IService<LabelLib> {

    /**
     * 添加标签
     *
     * @param request 请求
     */
    void addLabel(LabelLibSaveOrUpdateRequest request);

    /**
     * 更新标签
     *
     * @param request 请求
     */
    void updateLabel(LabelLibSaveOrUpdateRequest request);

    /**
     * 删除标签
     *
     * @param id id
     */
    void deleteLabel(Long id);

    /**
     * 列表标签树
     *
     * @return {@link List}<{@link LabelLibTreeVO}>
     */
    List<LabelLibTreeVO> listLabelTree();

    /**
     * 点击标签获取账号列表
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link LabelLibAccount}>
     */
    PageResponse<LabelLibAccount> listAccount(LabelLibAccountRequest request);

    /**
     * 账号-添加账号
     *
     * @param request 请求
     */
    void addAccount(LabelLibAccountSaveOrUpdateRequest request);

    /**
     * 账号-上传账号Excel文件
     *
     * @param file       文件
     * @param labelLibId
     */
    List<Integer> uploadAccount(MultipartFile file, Long labelLibId) throws IOException;
    /**
     * 账号-详情
     *
     * @param id id
     * @return {@link LabelLibAccount}
     */
    LabelLibAccount detailAccount(Long id);

    /**
     * 账号-删除账号
     *
     * @param id id
     */
    void delAccount(Long id);

    /**
     * 账号-推荐数据列表
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link LabelLibAccountRecommend}>
     */
    PageResponse<LabelLibAccountRecommend> listLabelAccountRecommend(LabelLibAccountRequest request);

    /**
     * 账号-推荐数据添加训练
     *
     * @param request 请求
     */
    void labelAccountRecommendAddToTrain(LabelLibAccountRecommendTrainRequest request);

    /**
     * 关键词-获取
     *
     * @param labelLibId 标签自由id
     * @return {@link LabelLibKeyword}
     */
    LabelLibKeyword getKeyword(Long labelLibId);

    /**
     * 关键词-添加关键词
     *
     * @param request 请求
     */
    void addKeyword(LabelLibKeywordSaveOrUpdateRequest request);


    /**
     * 更新关键词
     *
     * @param request 请求
     */
    void updateKeyword(LabelLibKeywordSaveOrUpdateRequest request);

    /**
     * 关键词-删除关键词
     *
     * @param id id
     */
    void delKeyword(Long id);

    /**
     * 关键词-推荐数据列表
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link LabelLibKeywordRecommend}>
     */
    PageResponse<LabelLibKeywordRecommend> listLabelKeywordRecommend(LabelLibKeywordRequest request);


    /**
     * 样本集-获取列表
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link LabelLibSample}>
     */
    PageResponse<LabelLibSample> listSample(LabelLibSampleRequest request);

    /**
     * 样本集-添加样本
     *
     * @param request 请求
     */
    void addSample(LabelLibSampleSaveOrUpdateRequest request);

    /**
     * 样本集-上传账号Excel文件
     *
     * @param file       文件
     * @param labelLibId 标签自由id
     * @return {@link List}<{@link Integer}>
     */
    List<Integer> uploadSample(MultipartFile file, Long labelLibId) throws IOException;

    /**
     * 样本集-删除样本集
     *
     * @param id id
     */
    void delSample(Long id);

    /**
     * 样本集-推荐数据列表
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link LabelLibSampleRecommend}>
     */
    PageResponse<LabelLibSampleRecommend> listSampleRecommend(LabelLibSampleRequest request);

    /**
     * 样本集-推荐数据添加训练
     *
     * @param request 请求
     */
    void sampleRecommendAddToTrain(LabelLibSampleRecommendTrainRequest request);



}
